完成上週的基礎環境設置,那我們就可以開始進行編程了,今天我們要做的就是todo list
沒錯!
就是大家最愛做的那個
那麼廢話不多說,就讓我們開始吧!!
在terminal上輸入
php artisan make:model Task -mc
Task
是model名稱,-mc
會創建與model相關的migration
及controller
,
執行指令後,會產生3個檔案,Task.php
在app
,TaskController.php
在app/Http/Controllers
, *_create_tasks_table.php
在database/migrations
。
Database Schema是在database/migrations
裡的*_create_tasks_table.php
,將內容更改成
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTasksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string("task");
$table->boolean("iscompleted");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tasks');
}
}
在上一步設定好了Database Schema,現在要把設定migrate到MySQL/MariaDB上,在migrate之前別忘了先在.env
檔設定連線資訊
php artisan migrate
Controller負責處理Laravel的功能,我們要編輯TaskController.php
來定義應用程式的功能
首先,要引入Task model
use App\Task
接下來新增以下程式碼在TaskController
class裡,來定義index()
功能
public function index()
{
$tasks = Task::where("iscompleted", false)->orderBy("id", "DESC")->get();
$c_tasks = Task::where("iscompleted", true)->get();
return response()->json([
'tasks' => $tasks,
'c_tasks' => $c_tasks
]);
}
這個function會查詢tasks
資料表中的已完成及未完成task,並回傳一個JSON物件,內容是以降序排列。
然後是store()
public function store(Request $request)
{
$task = Task::create($request->all());
return response()->json([
"code" => 200,
"message" => "Task added successfully"
]);
}
這個function會將POST
傳入的值存入對應的欄位中,並以JSON回傳成功訊息。
接下來是complete()
public function complete($id)
{
$task = Task::find($id);
$task->iscompleted = true;
$task->save();
return response()->json([
"code" => 200,
"message" => "Task listed as completed"
]);
}
這個function會將指定id的iscompleted
欄位改為true
,並以JSON回傳成功訊息。
最後是destroy()
public function destroy($id)
{
$task = Task::find($id);
$task = $task->delete();
return response()->json([
"code" => 200,
"message" => "Task deleted successfully"
]);
}
這個function會將指定id的task刪除,並以JSON回傳成功訊息。
這是今天實作的最後一步了,編輯routes/api.php
來定義API連結。
<?php
Route::get("tasks", "TaskController@index");
Route::post("task", "TaskController@store");
Route::get("task/{id}/complete", "TaskController@complete");
Route::get("task/{id}/delete", "TaskController@destroy");